// TODO: Rewrite room settings tests for dialog support
// import React from 'react';
// import ReactDOM from 'react-dom';
// import expect from 'expect';
// import jest from 'jest-mock';
// import * as testUtils from '../../../test-utils';
// import sdk from 'matrix-react-sdk';
// const WrappedRoomSettings = testUtils.wrapInMatrixClientContext(sdk.getComponent('views.rooms.RoomSettings'));
// import MatrixClientPeg from '../../../../src/MatrixClientPeg';
// import SettingsStore from '../../../../src/settings/SettingsStore';
//
//
// describe('RoomSettings', () => {
//     let parentDiv = null;
//     let sandbox = null;
//     let client = null;
//     let roomSettings = null;
//     const room = testUtils.mkStubRoom('!DdJkzRliezrwpNebLk:matrix.org');
//
//     function expectSentStateEvent(roomId, eventType, expectedEventContent) {
//         let found = false;
//         for (const call of client.sendStateEvent.mock.calls) {
//             const [
//                 actualRoomId,
//                 actualEventType,
//                 actualEventContent,
//             ] = call.slice(0, 3);
//
//             if (roomId === actualRoomId && actualEventType === eventType) {
//                 expect(actualEventContent).toEqual(expectedEventContent);
//                 found = true;
//                 break;
//             }
//         }
//         expect(found).toBe(true);
//     }
//
//     beforeEach(function(done) {
//         testUtils.beforeEach(this);
//         sandbox = testUtils.stubClient();
//         client = MatrixClientPeg.get();
//         client.credentials = {userId: '@me:domain.com'};
//
//         client.setRoomName = jest.fn().mockReturnValue(Promise.resolve());
//         client.setRoomTopic = jest.fn().mockReturnValue(Promise.resolve());
//         client.setRoomDirectoryVisibility = jest.fn().mockReturnValue(Promise.resolve());
//
//         // Covers any room state event (e.g. name, avatar, topic)
//         client.sendStateEvent = jest.fn().mockReturnValue(Promise.resolve());
//
//         // Covers room tagging
//         client.setRoomTag = jest.fn().mockReturnValue(Promise.resolve());
//         client.deleteRoomTag = jest.fn().mockReturnValue(Promise.resolve());
//
//         // Covers any setting in the SettingsStore
//         // (including local client settings not stored via matrix)
//         SettingsStore.setValue = jest.fn().mockReturnValue(Promise.resolve());
//
//         parentDiv = document.createElement('div');
//         document.body.appendChild(parentDiv);
//
//         const gatherWrappedRef = (r) => {roomSettings = r;};
//
//         // get use wrappedRef because we're using wrapInMatrixClientContext
//         ReactDOM.render(
//             <WrappedRoomSettings
//                 wrappedRef={gatherWrappedRef}
//                 room={room}
//             />,
//             parentDiv,
//             done,
//         );
//     });
//
//     afterEach((done) => {
//         if (parentDiv) {
//             ReactDOM.unmountComponentAtNode(parentDiv);
//             parentDiv.remove();
//             parentDiv = null;
//         }
//         sandbox.restore();
//         done();
//     });
//
//     it('should not set when no setting is changed', (done) => {
//         roomSettings.save().then(() => {
//             expect(client.sendStateEvent).not.toHaveBeenCalled();
//             expect(client.setRoomTag).not.toHaveBeenCalled();
//             expect(client.deleteRoomTag).not.toHaveBeenCalled();
//             done();
//         });
//     });
//
//     // XXX: Apparently we do call SettingsStore.setValue
//     xit('should not settings via the SettingsStore when no setting is changed', (done) => {
//         roomSettings.save().then(() => {
//             expect(SettingsStore.setValue).not.toHaveBeenCalled();
//             done();
//         });
//     });
//
//     it('should set room name when it has changed', (done) => {
//         const name = "My Room Name";
//         roomSettings.setName(name);
//
//         roomSettings.save().then(() => {
//             expect(client.setRoomName.mock.calls[0].slice(0, 2))
//                 .toEqual(['!DdJkzRliezrwpNebLk:matrix.org', name]);
//
//             done();
//         });
//     });
//
//     it('should set room topic when it has changed', (done) => {
//         const topic = "this is a topic";
//         roomSettings.setTopic(topic);
//
//         roomSettings.save().then(() => {
//             expect(client.setRoomTopic.mock.calls[0].slice(0, 2))
//                 .toEqual(['!DdJkzRliezrwpNebLk:matrix.org', topic]);
//
//             done();
//         });
//     });
//
//     it('should set history visibility when it has changed', (done) => {
//         const historyVisibility = "translucent";
//         roomSettings.setState({
//             history_visibility: historyVisibility,
//         });
//
//         roomSettings.save().then(() => {
//             expectSentStateEvent(
//                 "!DdJkzRliezrwpNebLk:matrix.org",
//                 "m.room.history_visibility", {history_visibility: historyVisibility},
//             );
//             done();
//         });
//     });
//
//     // XXX: Can't test this because we `getRoomDirectoryVisibility` in `componentWillMount`
//     xit('should set room directory publicity when set to true', (done) => {
//         const isRoomPublished = true;
//         roomSettings.setState({
//             isRoomPublished,
//         }, () => {
//             roomSettings.save().then(() => {
//                 expect(client.setRoomDirectoryVisibility.calls[0].arguments.slice(0, 2))
//                     .toEqual("!DdJkzRliezrwpNebLk:matrix.org", isRoomPublished ? "public" : "private");
//                 done();
//             });
//         });
//     });
//
//     it('should set power levels when changed', (done) => {
//         roomSettings.onPowerLevelsChanged(42, "invite");
//
//         roomSettings.save().then(() => {
//             expectSentStateEvent(
//                 "!DdJkzRliezrwpNebLk:matrix.org",
//                 "m.room.power_levels", { invite: 42 },
//             );
//             done();
//         });
//     });
//
//     it('should set event power levels when changed', (done) => {
//         roomSettings.onPowerLevelsChanged(42, "event_levels_m.room.message");
//
//         roomSettings.save().then(() => {
//             // We expect all state events to be set to the state_default (50)
//             // See powerLevelDescriptors in RoomSettings
//             expectSentStateEvent(
//                 "!DdJkzRliezrwpNebLk:matrix.org",
//                 "m.room.power_levels", {
//                     events: {
//                         'm.room.message': 42,
//                         'm.room.avatar': 50,
//                         'm.room.name': 50,
//                         'm.room.canonical_alias': 50,
//                         'm.room.history_visibility': 50,
//                         'm.room.power_levels': 50,
//                         'm.room.topic': 50,
//                         'im.vector.modular.widgets': 50,
//                     },
//                 },
//             );
//             done();
//         });
//     });
// });
